package pickbook.model;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;

import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.stereotype.Repository;

//희망도서 DB 접근 관련 Database Access Object implements 후 정의
@Repository
public class BuyBookDAOImpl implements BuyBookDAO{

	@Resource(name="sqlSessionTemplate")
	private SqlSessionTemplate sqlSessionTemplate;

	/**
	 * method : getSearchListByFactor
	 * comment : 검색어(factor)에 해당하는 책 정보를 찾는 메서드
	 * 
	 * @param factor
	 * @param pageNo
	 * @return
	 * 
	 * @author 이형철
	 * @date 2014-07-04
	 */
	@Override
	public List<BuyBookVO> getSearchListByFactor(String factor, String pageNo) {
		
		HashMap map = new HashMap();
		map.put("factor", factor);//검색어
		map.put("pageNo", pageNo);//페이지번호
		
		return sqlSessionTemplate.selectList("buybook.getSearchListByFactor", map);
		
	}
	
	/**
	 * method : searchByFactorTotalContent
	 * comment : 검색어(factor)로 검색된 총 컨텐츠 수를 리턴하는 메서드
	 * 
	 * @param factor
	 * @return
	 * 
	 * @author 이형철
	 * @date 2014-07-04
	 */
	@Override
	public int searchByFactorTotalContent(String factor) {
		return sqlSessionTemplate.selectOne("buybook.searchByFactorTotalContent", factor);
	}
	
	/**
	 * method : getSearchListByLocationUniv
	 * comment : 위치(location)과 대학교(univ)에 해당하는 책 정보를 찾는 메서드
	 * 
	 * @param location
	 * @param univ
	 * @param pageNo
	 * @return
	 * 
	 * @author 이형철
	 * @date 2014-07-04
	 */
	@Override
	public List<BuyBookVO> getSearchListByLocationUniv(String location, String univ, String pageNo) {
		HashMap map = new HashMap();
		map.put("location", location);//지역정보
		map.put("univ", univ);//대학명
		map.put("pageNo", pageNo);//페이지번호	
		return sqlSessionTemplate.selectList("buybook.getSearchListByLocationUniv", map);
	}
	
	/**
     * method : searchByLocationUnivTotalContent()
     * comment : 검색어(location, univ)로 검색된 총 컨텐츠 수를 리턴하는 메서드
     * 
     * @param location
     * @param univ
     * @return
     * 
     * @author 이형철
     * @date 2014-07-04
     */
    @Override
    public int searchByLocationUnivTotalContent(String location, String univ) {
       HashMap map = new HashMap();
       map.put("location", location);//지역정보
       map.put("univ", univ);//대학명
       return sqlSessionTemplate.selectOne("buybook.searchByLocationUnivTotalContent", map);
    }

    /**
	 * method : insertBook
	 * comment : 희망도서 추가 메서드
	 * 
	 * @param bbvo
	 * @return
	 * 
	 * @author 제형규, 김병각
	 * @date 2014-07-03
	 */
	@Override
	public void insertBook(BuyBookVO bbvo) {
		sqlSessionTemplate.insert("buybook.insertBook",bbvo);
	}
	
	/**
	 * method : updateBook
	 * comment : 나의 희망도서 수정하는 메서드
	 * 
	 * @param bbvo
	 * @return
	 * 
	 * @author 제형규, 김병각
	 * @date 2014-07-03 
	 */
	@Override
	public void updateBook(BuyBookVO bbvo) {
		sqlSessionTemplate.update("buybook.updateBook",bbvo);
	}
	
	/**
	 * method : deleteBook
	 * comment : 나의 희망도서 삭제하는 메서드
	 * 
	 * @param no
	 * @return
	 * 
	 * @author 제형규, 김병각
	 * @date 2014-07-03 
	 */
	@Override
	public void deleteBook(int no) {
		sqlSessionTemplate.delete("buybook.deleteBook",no);
	}
	
	/**
	 * method : findByBookNo
	 * comment : 책 번호에 해당하는 도서정보 조회 메서드
	 * 
	 * @param no
	 * @return
	 * 
	 * @author 제형규, 김병각
	 * @date 2014-07-03
	 */
	@Override
	public BuyBookVO findByBookNo(int no) {
		return sqlSessionTemplate.selectOne("buybook.findByBookNo",no);
	}

	/**
	 * method : getRecentBookList
	 * comment : pageNo를 통해 최신 순으로 희망도서 리스트를 받아오는 메서드
	 * 
	 * @param pageNo
	 * @return
	 * 
	 * @author 제형규, 이형철
	 * @date 2014-07-02
	 */
	@Override
	public List<BuyBookVO> getRecentBookList(String pageNo) {
		return sqlSessionTemplate.selectList("buybook.getRecentBookList", pageNo);
	}
	
	/**
	 * method : getAllBookList
	 * comment : pageNo를 통해 모든 희망도서 리스트를 받아오는 메서드
	 * 
	 * @param pageNo
	 * @return
	 * 
	 * @author 제형규
	 * @date 2014-07-04
	 */
	public List<BuyBookVO> getAllBookList(String pageNo){
		return sqlSessionTemplate.selectList("buybook.getAllBookList", pageNo);
	}

	/**
	 * method : totalBuyContent()
	 * comment : 희망도서 총 컨텐츠 수를 리턴하는 메서드
	 * 
	 * @return
	 * 
	 * @author 제형규
	 * @date 2014-07-04
	 */
	public int totalBuyContent(){
		return sqlSessionTemplate.selectOne("buybook.totalBuyContent");
	}
	
	/**
	 * method : totalContent()
	 * comment : 희망도서 총 컨텐츠 수를 리턴하는 메서드
	 * 
	 * @return
	 * 
	 * @author 제형규, 이형철
	 * @date 2014-07-02
	 */
	@Override
	public int totalContent() {
		return sqlSessionTemplate.selectOne("buybook.totalContent");
	}

	/**
	 * method : getMyBuyBookList
	 * comment : pageNo와 id를 통해 최신 순으로 나의 희망도서 리스트를 받아오는 메서드
	 * 
	 * @param pageNo
	 * @param id
	 * @return
	 * 
	 * @author 이형철
	 * @date 2014-07-03
	 */
	@Override
	public List<BuyBookVO> getMyBuyBookList(String pageNo,String id) {
		HashMap map = new HashMap();
		map.put("pageNo", pageNo);//페이지번호
		map.put("id", id);//회원아이디
		return sqlSessionTemplate.selectList("buybook.getMyBuyBookList", map);
	}
	
	/**
	 * method : myTotalBuyContent()
	 * comment : 로그인 되어있는 id로 나의 희망도서 총 컨텐츠 수를 리턴하는 메서드
	 * 
	 * @param id
	 * @return
	 * 
	 * @author 이형철
	 * @date 2014-07-03
	 */
	@Override
	public int myTotalBuyContent(String id) {
		return sqlSessionTemplate.selectOne("buybook.myTotalBuyContent", id);
	}
	
	/**
	 * method : updateVisible
	 * comment : no와 bVisible으로 나의 희망도서 공개 여부를 업데이트하는 메서드
	 * 
	 * @param no
	 * @param bVisible
	 * @return
	 * 
	 * @author 이형철
	 * @date 2014-07-03
	 */
	@Override
	public void updateVisible(int no, int bVisible) {
		HashMap map = new HashMap();
		map.put("no", no);//책번호
		map.put("bVisible", bVisible);//목록 공개여부
		sqlSessionTemplate.update("buybook.updateVisible", map);
	}
	
	/**
	 * method : searchBuyBook
	 * comment : 희망 도서 검색 메서드
	 * 
	 * @param factor
	 * @param pageNo
	 * @return
	 * 
	 * @author 제형규
	 * @date 2014-07-04 
	 */
	@Override
	public List searchBuyBook(String factor, String pageNo){
		Map map=new HashMap();
		map.put("factor", factor);//검색어
		map.put("pageNo", pageNo);//페이지번호
		return sqlSessionTemplate.selectList("buybook.searchBuyBook",map);
	}
	
	/**
	 * method : totalSearchContent()
	 * comment : 검색된 희망 도서 수를 리턴하는 메서드
	 * 
	 * @param factor
	 * @return
	 * 
	 * @author 제형규
	 * @date 2014-07-04
	 */
	public int totalSearchContent(String factor){
		return sqlSessionTemplate.selectOne("buybook.totalSearchContent", factor);
	}

}
